package com.wut.clock.mongo.repository;

import com.wut.clock.mongo.dto.FollowParams;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * @author ZYH
 * @unit D9Lab
 * @description 关注repository
 * @date 2022/6/11 9:46
 */
public interface FollowRepository extends MongoRepository<FollowParams,String> {
    /**
     * 根据粉丝的用户id和被关注者的用户id查询实体
     * @param followerUserId 粉丝用户id
     * @param followeeUserId 被关注者的用户id
     * @return FollowParams
     */
    FollowParams findByFollowerUserIdAndFolloweeUserId(Integer followerUserId, Integer followeeUserId);

    /**
     * 根据粉丝的用户id和被关注者的用户id删除实体 (取消关注)
     * @param followerUserId 粉丝用户id
     * @param followeeUserId 被关注者的用户id
     * @return int >0 删除成功
     */
    int deleteByFollowerUserIdAndFolloweeUserId(Integer followerUserId,Integer followeeUserId);

    /**
     * 分页获取某人的关注列表
     * @param followerUserId 粉丝的用户id
     * @param pageable 分页
     * @return 关注列表
     */
    Page<FollowParams> findByFollowerUserIdOrderByCreateTimeDesc(Integer followerUserId, Pageable pageable);

    /**
     * 分页获取某人的粉丝列表
     * @param followeeUserId 被关注者用户id
     * @param pageable 分页
     * @return 粉丝列表
     */
    Page<FollowParams> findByFolloweeUserIdOrderByCreateTimeDesc(Integer followeeUserId, Pageable pageable);

    /**
     * 获取某人的关注数
     * @param followerUserId 粉丝的用户id
     * @return int
     */
    int countByFollowerUserId (Integer followerUserId);

    /**
     * 获取某人的粉丝数
     * @param followeeUserId 粉丝的用户id
     * @return int
     */
    int countByFolloweeUserId (Integer followeeUserId);
}
